package com.zerowidth.moc.web.controller;

import com.zerowidth.db.bean.OrderBean;
import com.zerowidth.db.bean.PayCountBean;
import com.zerowidth.db.bean.UserQueryBean;
import com.zerowidth.moc.web.auth.annotation.NeedToken;
import com.zerowidth.moc.web.auth.annotation.NoToken;
import com.zerowidth.moc.web.bean.MoneyBean;
import com.zerowidth.moc.web.bean.StatUserBean;
import com.zerowidth.moc.web.controller.service.StatServiceV2;
import com.zerowidth.moc.web.resp.ResultBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import jakarta.servlet.http.HttpServletRequest;
import java.util.List;

@RestController
@RequestMapping("/api/v2")
public class StatControllerV2 {

    @Autowired
    StatServiceV2 statService;

    /**
     * 获取 今日、昨日、本月、上月、全部  X 所有付款类型、微信付款、支付宝付款 的个数
     * 共15条数据
     * <p>
     * 第1条：今日 所有付款类型 的 天、月、季、半、年、永 的个数
     * 第2条：今日 微信付款 的 天、月、季、半、年、永 的个数
     * 第3条：今日 支付宝付款 的 天、月、季、半、年、永 的个数
     * <p>
     * 第4条：昨日 所有付款类型 的 天、月、季、半、年、永 的个数
     * 第5条：昨日 微信付款 的 天、月、季、半、年、永 的个数
     * 第6条：昨日 支付宝付款 的 天、月、季、半、年、永 的个数
     * <p>
     * 第7条：本月 所有付款类型 的 天、月、季、半、年、永 的个数
     * 第8条：本月 微信付款 的 天、月、季、半、年、永 的个数
     * 第9条：本月 支付宝付款 的 天、月、季、半、年、永 的个数
     * <p>
     * 第10条：上月 所有付款类型 的 天、月、季、半、年、永 的个数
     * 第11条：上月 微信付款 的 天、月、季、半、年、永 的个数
     * 第12条：上月 支付宝付款 的 天、月、季、半、年、永 的个数
     * <p>
     * 第13条：全部 所有付款类型 的 天、月、季、半、年、永 的个数
     * 第14条：全部 微信付款 的 天、月、季、半、年、永 的个数
     * 第15条：全部 支付宝付款 的 天、月、季、半、年、永 的个数
     *
     * @return
     */
    @NoToken
    @GetMapping("/stat/incoming")
    public ResponseEntity<ResultBean<List<PayCountBean>>> getStatIncoming() {

        return statService.getStatIncoming();
    }

    /**
     * 返回 指定时间段内 所有付款记录
     *
     * @param start_time
     * @param end_time
     * @return
     */
    @NoToken
    @GetMapping("/stat/order")
    public ResponseEntity<ResultBean<List<OrderBean>>> getOrderList(
            @RequestParam("start_time") String start_time,
            @RequestParam(value = "end_time", required = false) String end_time) {

        return statService.getOrderList(start_time, end_time);
    }

    /**
     * 获取指定时间段内的 用户统计相关数据
     *
     * @param start_time
     * @param end_time
     * @return
     */
    @NoToken
    @GetMapping("/stat/user")
    public ResponseEntity<ResultBean<StatUserBean>> getUserStat(
            @RequestParam("start_time") String start_time,
            @RequestParam(value = "end_time", required = false) String end_time) {

        return statService.getUserStat(start_time, end_time);
    }

    @NoToken
    @GetMapping("/stat/money")
    public ResponseEntity<ResultBean<MoneyBean>> getMoneyStat() {
        return statService.getStatMoney();
    }

    @NoToken
    @GetMapping("/active_code/create")
    public ResponseEntity<ResultBean<String>> createActiveCode(
            @RequestParam("vip_type") int vipType) {
        return statService.createActiveCode(vipType);
    }

    /**
     * 解绑设备
     */
    @NoToken
    @PostMapping("/user/unbind")
    public ResponseEntity<ResultBean<Void>> unbind(
            HttpServletRequest request,
            @RequestParam("pwd") String pwd,
            @RequestParam("unbind_key") String unbind_key) {

        return statService.unbind(request, pwd, unbind_key);
    }

    /**
     * 升级永久会员
     */
    @NoToken
    @PostMapping("/user/lever_up")
    public ResponseEntity<ResultBean<Void>> lever_up(
            HttpServletRequest request,
            @RequestParam("user_id") String user_id,
            @RequestParam("vip_type") int vipType) {

        return statService.lever_up(request, user_id, vipType);
    }

    /**
     * 查询用户id
     */
    @NoToken
    @PostMapping("/user/query_user_id")
    public ResponseEntity<ResultBean<UserQueryBean>> query_user_id(
            HttpServletRequest request,
            @RequestParam("key") String key) {

        return statService.query_user_id(request, key);
    }

}
